/**
 * 给定N和K，要求输出约瑟夫序列。
 * 令Si是[1...i]区间内的人数之和，初始显然是1,2,3,4,5,...
 * 注意到Si本质上还是第i个人在现有队列中的序号，例如：
 * 初始情况是：1,2,3,4,5,6,7,8,9,10,...
 * 假设K=3，则第一轮过后，变为了：
 * 1,2,2,3,4,5,6,7,8,9
 * 可以发现前缀和实时反映了当前人的编号
 * 因此对于第一遍而言，假设当前序号是p，则下一个要出列的序号就应该是p+K-1
 * 初始p=1，则要出的序号是3，此时前缀和是12345678910，所以要出的位置是3
 * 出完以后前缀和变成了1223456789，下一个要出的序号是5，要出的位置是6
 * 出完以后前缀和变成了1223445678，下一个要出的序号是7，要出的位置是9
 * 出完以后前缀和变成了1223445667
 * 到此为止显然都是正确的
 * 如果 p+K-1 超出了现有人数的范围怎么办？假设现有人数是T个人，要找的序号是x，显然就是从头找x-T的序号，显然要取模
 * 于是要找的序号就是 (p+K-1-1)%T+1
 * 对上述例子而言就是要找2，于是位置也是2，前缀和变成了1112334556
 * 接下来找4，位置是7，前缀和变成了1112333445
 * 接下来找6，已经超出了最大人数，于是从头开始找(6-1)%5+1=1，位置就是1，前缀和变成了0001222334
 * 接下来找3，位置是8，前缀和变成了0001222223
 * 接下来找5，超出了最大人数，应该找(5-1)%3+1=2，位置是5，前缀和变成了000111112
 * 接下来找(2+2-1)%2+1=2，位置是10
 * 最后的出列顺序是36927185、10，注意要找的现有序号（即前缀和）与原位置的区别。
 * 用树状数组维护前缀和即可，找位置可以在树状数组上二分。
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;
using Real = long double;

struct FenwickTree{ // 树状数组

using value_type = int;
using vec_type = vector<value_type>;

int n;
vec_type c;

FenwickTree() = default;

static int lowbit(int x){return x & -x;}

void init(int nn){this->c.assign((this->n=nn) + 1, 0);}

void modify(int pos, value_type delta){
    for(int i=pos;i<=this->n;i+=lowbit(i)) this->c[i] += delta;
}

value_type query(int pos)const{
    value_type ans = 0;
    for(int i=pos;i;i-=lowbit(i)) ans += this->c[i];
    return ans;
}

value_type query(int s, int e)const{return this->query(e) - this->query(s - 1);}

};

FenwickTree Bt;
int N, K;
vi Ans;

int proc(int want){
    int left = 1, right = N, mid;
    do{
        mid = (left + right) >> 1;
        auto tmp = Bt.query(mid);
        if(tmp < want) left = mid + 1;
        else right = mid - 1;
    }while(left <= right);
    return left;
}

void work(){ 
    cin >> N >> K;
    Bt.init(N);
    for(int i=1;i<=N;++i) Bt.modify(i, 1);

    int cur = 1;
    int k = K - 1;
    int total = N;
    for(int i=1;i<N;++i){
        cur = (cur + k - 1) % total + 1;        
        auto tmp = proc(cur);
        Ans.emplace_back(tmp);
        Bt.modify(tmp, -1);
        total -= 1;
    }

    for(auto i : Ans) cout << i << " ";
    cout << endl;
	return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	

    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}